package org.example.inventory.dao;


import org.example.inventory.entity.Purchase;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

public interface PurchaseDao {

        /**
         * 插入采购记录
         * @param purchase 采购记录对象
         * @return 插入后的完整对象
         */
        Purchase insertPurchase(Purchase purchase);

        /**
         * 根据ID查询采购记录
         * @param id 采购记录ID
         * @return 采购记录对象
         */
        Purchase selectPurchaseById(Integer id);

        /**
         * 更新采购记录
         * @param purchase 采购记录对象（包含需要更新的字段）
         * @return 受影响的行数
         */
        int updatePurchase(Purchase purchase);

        /**
         * 删除采购记录
         * @param id 采购记录ID
         * @return 受影响的行数
         */
        int deletePurchase(Integer id);

        /**
         * 分页查询采购记录
         * @param pageNum 页码（从1开始）
         * @param pageSize 每页记录数
         * @return 采购记录列表
         */
        List<Purchase> selectPurchasesByPage(int pageNum, int pageSize);

        /**
         * 条件组合查询采购记录
         * @param productId 商品ID (可选，传入null表示不限制)
         * @param operatorId 操作员ID (可选，传入null表示不限制)
         * @param minQuantity 最小采购量 (可选，传入null表示不限制)
         * @return 采购记录列表
         */
        List<Purchase> searchPurchases(
                Integer productId,
                Integer operatorId,
                Integer minQuantity
        );

        /**
         * 统计某商品总采购量
         * @param productId 商品ID
         * @return 总采购量
         */
        int sumQuantityByProductId(Integer productId);

        /**
         * 按供应商统计采购金额（假设有supplier_id字段）
         * @return 供应商ID与对应采购金额的映射
         */
        Map<Integer, BigDecimal> sumAmountBySupplier();

        /**
         * 获取最近一次采购价格
         * @param productId 商品ID
         * @return 最近一次采购价格
         */
        BigDecimal getLatestPurchasePrice(Integer productId);


}
